package com.freesky.common.redis;

import java.util.List;

/**
 * @author: 陈玉林
 * @modifiedBy:
 * @date: Create In 15:00 2018/11/30
 * @description:
 */
public interface IRedisTemplate {
    /**
     * 向缓存中增加对象
     *
     * @param key
     * @param t
     * @param <T>
     */
    <T> void putCache(String key, T t);

//    /**
//     * 向缓存中增加集合
//     *
//     * @param key
//     * @param list
//     * @param <T>
//     */
//    <T> void putCacheList(String key, List<T> list);


    /**
     * 从缓存中获取缓存对象
     *
     * @param key
     * @param clazz
     * @return
     */
    <T> T getCacheObject(String key, Class<T> clazz);

    /**
     * 从缓存中获取缓存对象集合
     *
     * @param key
     * @param clazz
     * @param <T>
     * @return
     */
    <T> List<T> getCacheList(String key, Class<T> clazz);

    /**
     * 从缓存中集合，缓存对象
     *
     * @param key
     */
    Long delete(String key);

    /**
     * 删除object对应field
     *
     * @param key
     */
    Long hdel(String key, String... field) ;

    /**
     * 设置缓存有效时间
     *
     * @param key
     */
    Long expire(String key,int seconds);

    /**
     * 查看哈希表的指定字段是否存在
     * @param key
     * @param field
     * @return
     */
    Boolean hexists(String key, String field);

    /**
     * 返回哈希表中指定字段的值
     * @param key
     * @param field
     * @param <T>
     * @return
     */
    <T> T hget(String key, String field,Class<T> clazz);

    /**
     * 设置key，field，值为value的hash值
     * @param key
     * @param field
     * @param value
     * @param <T>
     * @return
     */
    <T> Long hset(String key, String field, T value);

    /**
     * 获取hash所有值
     *
     * @param key
     * @param clazz
     * @param <T>
     * @return
     */
    public <T> List<T> hvals(String key, Class<T> clazz);
}
